package com.kpmg.datalake.common.dao;

import com.kpmg.datalake.common.model.RbacFunction;
import com.kpmg.datalake.common.vo.RbacFunctionVo;
import com.kpmg.datalake.common.vo.RbacRoleVo;
import com.kpmg.datalake.common.vo.RbacUserVo;
import com.kpmg.datalake.common.vo.RbacVo;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;

/**
 * 权限管理_功能权限映射
 * @author eguo5
 *
 */
public interface RbacFunctionMapper {
	
	/**
	 * 获取功能树
	 * @param userId
	 * @return
	 */
	List<RbacFunction> rbacFunctionTree(@Param("userId") String userId,@Param("projectId") String projectId,@Param("lang_cd") String lang_cd);
	
	/**
	 * 获取用户功能权限树
	 * @param userId
	 * @return
	 */
	Map<String, Object> getLoginProjectId(@Param("userId") String userId);
	
	/**
	 * 获取vba功能树
	 * @param userId
	 * @return
	 */
	List<RbacFunction> vbaFunctionTree(@Param("userId") String userId,@Param("lang_cd") String lang_cd);
	
	/**
	 * 获取vba用户报表模板信息
	 * @param userId
	 * @param filter
	 * @return
	 */
	List<Map<String, Object>> vbaTemplateList(@Param("userId") String userId,@Param("filter") String filter);
	
	/**
	 * vba查询下钻维度信息
	 * @param smyRcrdId
	 * @return
	 */
	List<Map<String, Object>>vbaQueryDimDrill(@Param("smyRcrdId") String smyRcrdId);
	
	/**
	 * 依据用户和项目查询请求列表vba
	 * @param projectId
	 * @param searchValue
	 * @param orderColumn
	 * @param orderDir
	 * @return
	 */
	List<Map<String, Object>>selectBySearchForVba(@Param("prjId")String projectId, @Param("searchValue")String searchValue, @Param("orderColumn")String orderColumn, @Param("orderDir")String orderDir);
	
	/**
	 * 获取用户权限下菜单及功能，支持功能编号和功能名称模糊程序
	 * @param userId
	 * @param fcnCd
	 * @param fcnNm
	 * @return
	 */
	List<RbacFunction> selectFunctionList(@Param("userId") String userId,@Param("fcnCd") String fcnCd,@Param("fcnNm") String fcnNm);

	/**
	 * 获取用户权限下所有url
	 * @param userId
	 * @return
	 */
	List<String> selectFunctionUrl(@Param("userId") String userId,@Param("projectId") String projectId);

	/**
	 * 根据projectid和its_code进行权限同步
	 * @return
	 */
	boolean rbacSynchronization(@Param("userId") String userId,@Param("projectId") String projectId);

	/**
	 * 获取DATA用户列表
	 * @param userId
	 * @return
	 */
	List<RbacUserVo> selectUserBusiness(@Param("userId") String userId,@Param("projectId") String projectId);
	
	/**
	 * 获取权限列表
	 * @param userId
	 * @return
	 */
	List<Map<String, Object>> selectProjectList(@Param("userId") String userId);
	
	/**
	 * 获取DATA用户角色列表
	 * @param userId
	 * @param roleInfo
	 * @return
	 */
	List<Map<String,Object>> selectRoleList();
	
	/**
	 * 删除DATA用户
	 * @param userId
	 * @param delSign
	 * @return
	 */
	int deleteUserForDATA(@Param("userId") String userId,@Param("projectId") String projectId);
	
	/**
	 * 删除DATA用户角色关联
	 * @param userId
	 * @param delSign
	 * @return
	 */
	int deleteUserRole(@Param("userId") String userId,@Param("projectId") String projectId);
	
	/**
	 * 添加用户角色关联
	 * @param userId
	 * @param delSign
	 * @return
	 */
	int insertUserRole(@Param("userId") String userId,@Param("userName") String userName
						,@Param("roleArray") String[] roleArray,@Param("projectId") String projectId);
	
	/**
	 * 获取用户角色
	 * @param userId
	 * @return
	 */
	List<String> selectUserRoleType(@Param("userId") String userId,@Param("projectId") String projectId);
	
	/**
	 * 修改密码
	 * @param userId
	 * @param password
	 * @return
	 */
	int changePassword(@Param("userId") String userId,@Param("password") String password);
	
	/**
	 * 获取BA用户列表
	 * @param userId
	 * @return
	 */
	List<RbacUserVo> selectUserBA(@Param("type") String type);
	
	/**
	 * 删除BA用户
	 * @param userId
	 * @param delSign
	 * @return
	 */
	int deleteUserForBA(@Param("userId") String userId);
	
	/**
	 * 通过员工工号查询用户信息
	 * @param type
	 * @return
	 */
	List<Map<String, Object>>selectUserByEmpId(@Param("empId") String empId);

	/**
	 * 通过员工工号查询用户信息
	 * @param type
	 * @return
	 */
	Map<String, Object>selectUserByUserId(@Param("userId") String userId);
	
	/**
	 * 获取所有project
	 * @return
	 */
	List<Map<String, Object>>getAllProject();
	
	/**
	 * 新建用户COMMON_USER
	 * @param rbacUserVo
	 * @return
	 */
	int insertUserInfoNew(RbacUserVo rbacUserVo);

	/**
	 * 新建用户PRVG_USR
	 * @param rbacUserVo
	 * @return
	 */
	int insertUserInfoOld(RbacUserVo rbacUserVo);
	/**
	 * 用户绑定项目
	 * @param userId
	 * @param empName
	 * @param projectId
	 * @return
	 */
	int userAddProject(@Param("userId") String userId,@Param("empName") String empName, @Param("projectId") String projectId);

	/**
	 * 为新建用户绑定默认角色
	 * @param userId
	 * @param creater
	 * @return
	 */
	int userAddDefaultRole(@Param("userId") String userId,@Param("empName") String empName, @Param("creater") String creater);


	/**
	 * 新建角色
	 * @param rbacRoleVo
	 * @return
	 */
	int insertRoleInfo(RbacRoleVo rbacRoleVo);

	/**
	 * 新建功能
	 * @param rbacFunctionVo
	 * @return
	 */
	int insertFunctionInfo(RbacFunctionVo rbacFunctionVo);

	/**
	 * 用户状态更新(1:启用;0:禁用)
	 * @param userId
	 * @param status
	 * @return
	 */
	int updateUserStatusByUserId(@Param("userId") String userId,@Param("status") String status);

	/**
	 * 角色状态更新(1:启用;0:禁用)
	 * @param roleId
	 * @param status
	 * @return
	 */
	int updateRoleStatusByRoleId(@Param("roleId") String roleId,@Param("status") String status);

	/**
	 * 删除角色
	 * @param roleId
	 * @param delSign
	 * @return
	 */
	int deleteRoleStatusByRoleId(@Param("roleId") String roleId,@Param("delSign") String delSign);

	/**
	 * 功能状态更新(1:启用;0:禁用)
	 * @param fcnCd
	 * @param status
	 * @return
	 */
	int updateFunctionStatusByFcnCd(@Param("fcnCd") String fcnCd,@Param("status") String status);
	
	/**
	 * 删除功能
	 * @param fcnCd
	 * @param delId
	 * @return
	 */
	int deleteFunctionStatusByFcnCd(@Param("fcnCd") String fcnCd,@Param("delId") String delId);

	/**
	 * 用户角色权限修改
	 * @param rbacVo
	 * @return
	 */
	int userAddRole(RbacVo rbacVo);

	/**
	 * 用户角色权限删除
	 * @param rbacVo
	 * @return
	 */
	int userDeleteRoleByUserId(RbacVo rbacVo);

  /**
   * 获取人员历权限
   *
   * @param userName 用户名
   * @param projectId 项目信息
   * @param roleType 角色类型
   * @return 执行信息
   */
  List<String> getOldUserPermissions(String userName, String projectId, String roleType);
}
